package com.ruoyi.lvlian.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Null2StrUtil {

    /**
     * 将列表中每个对象的所有字段为null的值设置为空字符串，并返回新的列表
     *
     * @param list 要处理的对象列表
     * @return 处理后的新列表
     * @throws IllegalAccessException
     */
    public static List<?> sanitizeObjectList(List<?> list) throws IllegalAccessException {
        List<Object> newList = new ArrayList<>();

        for (Object obj : list) {
            if (obj == null) {
                continue;
            }

            // 获取对象的所有字段
            Field[] fields = obj.getClass().getDeclaredFields();

            for (Field field : fields) {
                // 使私有字段可访问
                field.setAccessible(true);

                // 处理String类型的字段
                if (field.getType() == String.class) {
                    String value = (String) field.get(obj);

                    // 如果字段值为null，设置为空字符串
                    if (value == null) {
                        field.set(obj, "");
                    }
                }
                // 处理Long类型的字段
                else if (field.getType() == Long.class || field.getType() == long.class) {
                    Long value = (Long) field.get(obj);

                    // 如果字段值为null，设置为0L
                    if (value == null) {
                        field.set(obj, 0L);
                    }
                }
                // 处理Integer类型的字段
                else if (field.getType() == Integer.class || field.getType() == int.class) {
                    Integer value = (Integer) field.get(obj);

                    // 如果字段值为null，设置为0
                    if (value == null) {
                        field.set(obj, 0);
                    }
                }
                // 处理Double类型的字段
                else if (field.getType() == Double.class || field.getType() == double.class) {
                    Double value = (Double) field.get(obj);

                    // 如果字段值为null，设置为0.0
                    if (value == null) {
                        field.set(obj, 0.0);
                    }
                }
                // 处理其他类型的字段（如果需要）
                else {
                    // 可以在此处处理其他类型
                    System.out.println(field.getType() + " " + field.get(obj));
                }
            }
            newList.add(obj);
        }

        return newList;
    }
}
